package com.domus.dreamMenu.servidor.bancodados;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.domus.dreamMenu.tipos.AreaMesa;
import com.domus.dreamMenu.tipos.Mesa;

public class ConexaoBancoDadosMesa extends ConexaoBancoDados {

	public void inserirArea(AreaMesa novo){
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("INSERT INTO area " +
					"VALUES (?, ?, ?)");
			comando.setInt(1, novo.getId());
			comando.setString(2, novo.getNome());
			comando.setInt(3, novo.getMatriculaGarcom());
			
			comando.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

	public void removerArea(int id) {
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("DELETE FROM area " +
					"WHERE id = ?");
			comando.setInt(1, id);
						
			comando.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

	public void atualizarArea(AreaMesa novo, int id) {
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("UPDATE area SET " +
					"id = ?, nome = ?, matricula_garcom = ? WHERE id = ?");
			comando.setInt(1, novo.getId());
			comando.setString(2, novo.getNome());
			comando.setInt(3, novo.getMatriculaGarcom());
			comando.setInt(4, id);
						
			comando.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void inserirMesa(int numero, int area) {
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("INSERT INTO mesa " +
					"VALUES (?, ?)");
			comando.setInt(1, numero);
			comando.setInt(2, area);
						
			comando.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void removerMesa(int mesa) {
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("DELETE FROM mesa " +
					"WHERE numero = ?");
			comando.setInt(1, mesa);
						
			comando.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void atualizarMesa(int novoNumero, int novaArea, int numeroAntigo) {
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("UPDATE mesa SET " +
					"numero = ?, id_area = ? WHERE numero = ?");
			comando.setInt(1, novoNumero);
			comando.setInt(2, novaArea);
			comando.setInt(3, numeroAntigo);
						
			comando.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public ArrayList<AreaMesa> getAreas() {
		try {
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("SELECT id, nome, " +
					"matricula_garcom FROM area");
			
			ArrayList<AreaMesa> areas = new ArrayList<AreaMesa>();
			ResultSet resultSetAreas = comando.executeQuery();
			
			while(resultSetAreas.next()){
				int idArea = resultSetAreas.getInt(1);
				String nome = resultSetAreas.getString(2);
				int garcom = resultSetAreas.getInt(3);
				
				comando = ConexaoBancoDados.conexao.prepareStatement("SELECT numero FROM mesa " +
						"WHERE id_area = ? ORDER BY numero");
				comando.setInt(1, idArea);
				
				ResultSet resultSetMesas = comando.executeQuery();								
				ArrayList<Mesa> mesas = new ArrayList<Mesa>();
				
				while(resultSetMesas.next()){
					int numeroMesa = resultSetMesas.getInt(1);
					mesas.add(new Mesa(numeroMesa, idArea));
				}
				
				areas.add(new AreaMesa(idArea, nome, mesas, garcom));
			}
			
			return areas;
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

	public ArrayList<AreaMesa> consultarAreasMesas() {
		try{
			PreparedStatement comando = ConexaoBancoDados.conexao.prepareStatement("SELECT id, " +
					"matricula_garcom, nome FROM area");
			ResultSet resultSetAreas = comando.executeQuery();
			ArrayList<AreaMesa> areas = new ArrayList<AreaMesa>();
			
			while(resultSetAreas.next()){
				int id = resultSetAreas.getInt(1);
				int garcom = resultSetAreas.getInt(2);
				String nome = resultSetAreas.getString(3);
				
				comando = ConexaoBancoDados.conexao.prepareStatement("SELECT numero FROM mesa " +
						"WHERE id_area = ?");
				comando.setInt(1, id);
				ResultSet resultSetMesas = comando.executeQuery();
				ArrayList<Mesa> mesas = new ArrayList<Mesa>();
				
				while(resultSetMesas.next()){
					mesas.add(new Mesa(resultSetMesas.getInt(1), id));
				}
				
				areas.add(new AreaMesa(id, nome, mesas, garcom));
			}
			
			return areas;
			
		} catch(SQLException e){
			
		}
		
		return null;
	}

	public ArrayList<Mesa> consultarMesas() {
		
		return null;
	}
}
